// 验证手机号云函数
const cloud = require('wx-server-sdk')

cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})

const db = cloud.database()

exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
  const { code } = event

  console.log('云函数被调用，参数:', { code, openid: wxContext.OPENID })

  try {
    // 调用微信接口获取手机号
    console.log('开始调用微信接口获取手机号')
    const result = await cloud.openapi.phonenumber.getPhoneNumber({
      code: code
    })

    console.log('微信接口返回结果:', result)

    // 修复：微信接口返回的是 errCode 而不是 errcode
    if (result.errCode !== 0) {
      console.error('微信接口返回错误:', result.errCode, result.errMsg)
      return {
        success: false,
        message: '获取手机号失败: ' + (result.errMsg || '未知错误'),
        errcode: result.errCode
      }
    }

    // 修复：微信接口返回的是 phoneInfo 而不是 phone_info
    const phoneNumber = result.phoneInfo.phoneNumber
    const purePhoneNumber = result.phoneInfo.purePhoneNumber
    const countryCode = result.phoneInfo.countryCode

    console.log('解析出的手机号信息:', { phoneNumber, purePhoneNumber, countryCode })

    // 验证用户是否存在且手机号匹配
    const userQuery = await db.collection('users').where({
      _openid: wxContext.OPENID
    }).get()

    if (userQuery.data.length === 0) {
      return {
        success: false,
        message: '用户不存在'
      }
    }

    const user = userQuery.data[0]
    
    // 检查用户是否已绑定手机号
    if (!user.phoneNumber) {
      // 如果用户未绑定手机号，则绑定当前手机号
      await db.collection('users').doc(user._id).update({
        data: {
          phoneNumber: purePhoneNumber,
          countryCode: countryCode,
          updateTime: db.serverDate()
        }
      })
    } else if (user.phoneNumber !== purePhoneNumber) {
      // 如果已绑定的手机号与当前手机号不匹配
      return {
        success: false,
        message: '手机号与绑定的手机号不匹配'
      }
    }

    return {
      success: true,
      message: '验证成功',
      data: {
        phoneNumber: purePhoneNumber,
        countryCode: countryCode
      }
    }

  } catch (error) {
    console.error('验证手机号失败:', error)
    return {
      success: false,
      message: '验证失败，请重试',
      error: error.message
    }
  }
}